草庐IT

C++ 对和指针

全部标签

c++ - 指向数组的指针

我想知道,你能在一个数组中创建一个指向一组变量的指针吗?像这样array[20]{'a','b','c',...}pointer=array[6through10];那么你可以说...*pointer[0]==array[6];和*pointer[5]==array[10];和*指针的长度5==sizeof(*pointer)\sizeof(type);确定让我解释一下我想要完成的事情,也许这会让我清醒一点。我想将整个文件读入缓冲区,但我想逐个读取。将一个小数组传递给read()然后将其循环到更大的数组中达不到目的。我希望我可以直接“指向”我想要填充的缓冲区中的一个区域,并将其传递给r

c++ - 为什么 C++ 不允许您请求指向最派生类的指针?

(这个问题应该引用Stroustrup来回答。)能够请求指向最派生类的指针似乎非常有用,如下所示:classBase{...};classDerivedA{...};classDerivedB{...};classProcessor{public:voidDo(Base*b){...}voidDo(DerivedA*d){...}voidDo(DerivedB*d){...}};listthings;Processorp;for(list::iteratori=things.begin(),e=things.end();i!=e;++i){p.Do(CAST_TO_MOST_DERIV

c++ - c++ 中是否可能存在指向不同类型的指针数组?

在C++中是否可以使用指向不同类型的指针数组?请举个例子) 最佳答案 通常,如果您想拥有不同“类型”的指针的集合,您可以通过从基类/接口(interface)派生并存储指向该基类的指针的方式来实现它。然后通过多态性,您可以让它们表现为不同的类型。classBase{public:virtualvoiddoSomething()=0;};classA:publicBase{voiddoSomething(){coutpointers;pointers.push_back(newA);pointers.push_back(newB);

c++ - 在 C++ 中将指针表示为字符串的最佳可移植方式是什么?

我需要将指针表示为用户的字符串。有时这些值可能会保存到一个文件并传输到具有不同体系结构的计算机(32位与64位是当前的主要问题)并从文本文件加载以进行比较-我只会比较加载的值彼此,但我仍然更喜欢比较数字而不是字符串。我目前正在使用:SomeClass*p;...printf("%ld",(uintptr_t)p);但我想知道这是否是可移植的(虽然Windows和Linux仅在现阶段很重要),以及一旦出现128位系统这是否会中断?编辑:除非我决定使用uint64_t,并确定64位是屋顶,否则无法完成此操作,因为某些64位指针可能在32位整数范围之外。因此,我决定比较字符串会更安全,即使它

C++ 指针名称

我知道指针用于指向对象,因此您必须在程序中使用相同的指针。但是指针名称是如何存储的。声明一个比它指向的对象占用更多资源的指针名称是否有点矫枉过正,例如:intintOne=0;int*this_pointer_is_pointing_towards_intOne=&intOne;我知道这是一个荒谬的例子,但我只是想把这个想法说清楚。编辑:指针的名称必须存储在比指向对象的地址占用更多字节的地方。 最佳答案 变量名的长度对程序的大小没有任何影响,只会影响编写程序所需的时间。 关于C++指针名

c++ - 如何安全删除多个指针

我有一些代码使用了很多指向同一个地址的指针。给出一个等效的简单示例:int*p=newint(1);int*q=p;int*r=q;deleter;r=NULL;//ok//deleteq;q=NULL;//NOTok//deletep;p=NULL;//NOTok如何在不多次删除的情况下安全地删除它?如果我有很多指针都指向同一地址的对象,这尤其困难。 最佳答案 您的工具是boost库的shared_ptr。查看文档:http://www.boost.org/doc/libs/1_44_0/libs/smart_ptr/shared

c++ - 将指针从 C++ 传递到 Python/w boost python?

我正在使用BoostPython,我在C++中生成了一个大的整数vector,我想在Python中访问这个vector而不复制它。在C++中我有:BOOST_PYTHON_MODULE(myModule){class_>("vectorInt").def(vector_indexing_suite>());def("ReturnVectorPtr",ReturnVectorPtr,return_value_policy());}vector*ReturnVectorPtr(){returnnewvector();}然后在python中我有:importmyModulemyModule.

c++ - g++ 将返回的字符串文字视为 const char 指针而不是 const char 数组

当从应该使用g++(版本4.7.3)执行隐式转换的函数返回字符串文字时,我看到了一些奇怪的行为。任何人都可以解释为什么以下代码:#includeclassTest{public:templateTest(constchar(&foo)[N]){printf("Templateconstchararrayconstructor\n");}Test(char*foo){printf("char*constructor\n");}};Testfn(){return"foo";}intmain(){Testt("bar");Testu=fn();return0;}产生结果:Templateco

c++ - 指向任意类方法的模板非类型指针

假设我有:structFoo{voida();voidb(constint&);intc();};我可以创建一个函数,将任意指向Foo方法的指针作为参数:templateRcall(Foo*f,R(Foo::*method)(Formal...),Args&&...args){return(f->*method)(std::forward(args)...);}intgratuitous=call(&some_foo,&Foo::c);我还可以创建一个函数,将特定类型的指向Foo方法的指针作为模板:templatevoidonly_for_a(Foo*f){(f->*method)()

c++ - 在 C++ 中(不是在 C 中)指向具有未指定边界的数组的指针的可用情况

考虑以下代码:intmain(){int(*p)[];//pointertoarraywithunspecifiedboundsinta[]={1};intb[]={1,2};p=&a;//worksinCbutnotinC++p=&b;//worksinCbutnotinC++return0;}在纯C中,您可以将指针分配给任何维度数组的此类地址。但在C++中你不能。我发现了一种情况,编译器允许为此类指针赋值:structC{staticintv[];};intmain(){int(*p)[]=&C::v;//worksinC++if'v'isn'tdefined(onlydeclar